<?php
/*
 * * * * * * * * * * LICENCIA * * * * * * * * * * * * * * * * * * * * *

Copyright(C) 2012
Instituto Universtiario de Tecnología Dr. Federico Rivero Palacio

Este programa es Software Libre y usted puede redistribuirlo y/o modificarlo
bajo los términos de la versión 3.0 de la Licencia Pública General (GPLv3)
publicada por la Free Software Foundation (FSF), es distribuido sin ninguna
garantía. Usted debe haber recibido una copia de la GPLv3 junto con este
programa, sino, puede encontrarlo en la página web de la FSF, 
específicamente en la dirección http://www.gnu.org/licenses/gpl-3.0.html

 * * * * * * * * * * ARCHIVO * * * * * * * * * * * * * * * * * * * * *

Nombre: personaServicio.clase.php
Diseñador: Yuri Lazo (cloustery@gmail.com)
Programador: Yuri Lazo
Fecha: Diciembre de 2012
Descripción: 

	Esta clase ofrece el servicio de conexión a la base de datos, recibe 
	los parámetros, construye las consultas SQL, hace las peticiones a 
	la base de datos y retorna los objetos o datos correspondientes a la
	acción.

 * * * * * * * * Cambios/Mejoras/Correcciones/Revisiones * * * * * * * *
Diseñador - Programador /   Fecha   / Descripción del cambio
---                         ----      ---------

 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/

class PersonaServicio {
	
	static function agregarPersona($persona){
		global $gbConectorBD1;
		/*consulta sql: para colocarle el código busca el mayor en la base de datos
		     y le suma uno, si no lo encuentra le coloca el valor 11
		*/
		$sql = "insert into ts_persona values ($1,(select coalesce(max(codigo), 0) + 1 from ts_persona),$2,$3,$4,upper($5),upper($6),upper($7),upper($8),$9,$10,$11,$12,$13,$14,$15,$16);";					
		$parametros = array($persona->obtenerCedula(),				//1
							$persona->obtenerRif(),					//2
							$persona->obtenercodInstituto(),		//3
							$persona->obtenerCodPensum(),			//4
							$persona->obtenerNombre1(),				//5
							$persona->obtenerNombre2(),				//6
							$persona->obtenerApellido1(),			//7
							$persona->obtenerApellido2(),			//8
							$persona->obtenerSexo(),				//9
							$persona->obtenerFecNacimiento(),		//10
							$persona->obtenerTipSangre(),			//11
							$persona->obtenerTelefono1(),			//12
							$persona->obtenerTelefono2(),			//13
							$persona->obtenerCorreoPersonal(),		//14
							$persona->obtenerCorreoInstitucional(),	//15
							$persona->obtenerDireccion()			//16
						);
		
		//conexión, ejecución y desconexión de la base de datos				
		$gbConectorBD1->conectar();
		$result = $gbConectorBD1->ejecutarDMLDirecto($sql,$parametros);
		$gbConectorBD1->desconectar();
		
		//echo "pg_affected_rows: $result <br><br>";
		if (($result === FALSE) or ( $result === 0) )
			return false;
		else{
			return true;
		}
	}

	static function modificarPersona($persona){
		global $gbConectorBD1;

		$sql = "update ts_persona set cedula=$1, rif=$2, cod_instituto=$3,
		cod_pensum=$4,nombre1=upper($5),nombre2=upper($6), apellido1=upper($7),apellido2=upper($8),sexo=$9,
		fec_nacimiento=$10,tip_sangre=$11,telefono1=$12,telefono2=$13,cor_personal=$14,
		cor_institucional=$15,direccion=$16 where codigo = $17;";


		
		
		
		$parametros = array($persona->obtenerCedula(),           	//1
							$persona->obtenerRif(),					//2
							$persona->obtenerCodInstituto(),		//3
							$persona->obtenerCodPensum(),			//4
							$persona->obtenerNombre1(),				//5	
							$persona->obtenerNombre2(),				//6
							$persona->obtenerApellido1(),			//7
							$persona->obtenerApellido2(),			//8
							$persona->obtenerSexo(),				//9
							$persona->obtenerFecNacimiento(),		//10
							$persona->obtenerTipSangre(),			//11
							$persona->obtenerTelefono1(),			//12
							$persona->obtenerTelefono2(),			//13
							$persona->obtenerCorreoPersonal(),		//14
							$persona->obtenerCorreoInstitucional(),	//15
							$persona->obtenerDireccion(),	    	//16	
							$persona->obtenerCodigo()	    		//17
						);
		/*var_dump($sql);
		echo"<br>";
		var_dump($persona);
		die();*/
		
		$gbConectorBD1->conectar();
		
		$result = $gbConectorBD1->ejecutarDMLDirecto($sql,$parametros);
		
		$gbConectorBD1->desconectar();
		
		
		if ((($result === FALSE) or ( $result === 0))){
			return false; 
		}else return true;
	}

	
	static public function eliminarPersona($codigo){
		global $gbConectorBD1;
		
		$sql = "delete from ts_persona 
		         where  cast(codigo as varchar(10)) = $1;";
		
		$parametros = array($codigo);
		
		//conexión, ejecución y desconexión
		$gbConectorBD1->conectar();
		
		$result = $gbConectorBD1->ejecutarDMLDirecto($sql,$parametros);
		
		$gbConectorBD1->desconectar();

		if (($result === FALSE) or ( $result === 0))
			return false; 
		else 
			return true;
	}
	
	static public function obtenerPersonaPorCodigo($codigo) {
		//construir sql
		$campos = 	PersonaServicio::obtenerCampos();
		//$where = "(ts_persona.codigo = ts_persona.codigo) and ts_persona.codigo = $1";
		//return PersonaServicio::obtenerPersonas($campos, $where, null, array($codigo));
		$sql = "SELECT $campos
				FROM 
					public.ts_persona, 
				WHERE 
					ts_persona.codigo = '$codigo'";

		//1. conexión a base de datos...
		global $gbConectorBD1;
		
		$gbConectorBD1->conectar();
		$result = $gbConectorBD1->ejecutarDMLDirecto($sql);
		$gbConectorBD1->desconectar();

		//3. procesar resultado
		if (($result === false) or ($result === 0))
			return $result;
		else{
			$d = PersonaServicio::obtenerObjetoPersona($result,0);
			return $d;
		}
	}
	

	static public function obtenerPersonaPorPensum($pensum) {
		//construir sql
		$campos = 	PersonaServicio::obtenerCampos();
		//$where = "(ts_estudiante.codigo = ts_persona.codigo) and ts_persona.codigo = $1";
		//return PersonaServicio::obtenerPersonas($campos, $where, null, array($codigo));
		$sql = "SELECT $campos
				FROM 
					public.ts_persona, 
				WHERE 
					ts_persona.cod_pensum = '$pensum'";

		//1. conexión a base de datos...
		global $gbConectorBD1;
		
		$gbConectorBD1->conectar();
		$result = $gbConectorBD1->ejecutarDMLDirecto($sql);
		$gbConectorBD1->desconectar();

		//3. procesar resultado
		if (($result === false) or ($result === 0))
			return $result;
		else{			
			for ($i = 0 ; $i < count($result); $i++){
				//retorna un arreglo de Instituto en caso de existir data
				$persona[$i] = new Persona();
				$persona[$i] = PersonaServicio::obtenerObjetopersona($result,$i);
			}
			return $persona;
		}
	}
	static public function obtenerCamposSql(){
		$campos = 	"ts_persona.codigo,
					ts_persona.cedula,
					ts_persona.rif,
					ts_persona.cod_instituto,
					ts_persona.cod_pensum,
					ts_persona.nombre1,
					ts_persona.nombre2,
					ts_persona.apellido1,
					ts_persona.apellido2,
					ts_persona.sexo,
					ts_persona.fec_nacimiento,
					ts_persona.tip_sangre,
					ts_persona.telefono1,
					ts_persona.telefono2,
					ts_persona.cor_personal,
					ts_persona.cor_institucional,
					ts_persona.direccion";
		return $campos;
		}
		
	static public function obtenerObjetoPersona($persona,$i){
		
		$d = new Persona();
		
		$d->asignarCodigo(   			$persona[$i]['codigo'] 			);
		$d->asignarCedula(   			$persona[$i]['cedula'] 			);
		$d->asignarNombre1(				$persona[$i]['nombre1']			);
		$d->asignarNombre2(				$persona[$i]['nombre2']			);
		$d->asignarApellido1(       	$persona[$i]['apellido1']		);
		$d->asignarApellido2( 			$persona[$i]['apellido2']		);
		$d->asignarSexo(				$persona[$i]['sexo']			);
		$d->asignarRif(					$persona[$i]['rif']				);
		$d->asignarFecNacimiento( 		$persona[$i]['fec_nacimiento']	);
		$d->asignarTipSangre(   		$persona[$i]['tip_sangre']		);
		$d->asignarTelefono1(			$persona[$i]['telefono1']		);
		$d->asignarTelefono2(			$persona[$i]['telefono2']		);
		$d->asignarCorreoPersonal(		$persona[$i]['cor_personal']	);
		$d->asignarCorreoInstitucional(	$persona[$i]['cor_institucional']);
		$d->asignarDireccion(			$persona[$i]['direccion']		);
		$d->asignarCodPensum(			$persona[$i]['cod_pensum']		);
		$d->asignarcodInstituto(		$persona[$i]['cod_instituto']	);
		
		return $d;
	}
	
	static public function obtenerPersonas($campos="*", $where=null, $orderBy=null, $parametros=null){
		//instrucción para reconocer el objeto conexión
		global $gbConectorBD1;
		//construcción de la consulta SQL
		$sql = "select $campos from public.ts_persona" 
			. (($where!=null)? " where $where":"")
			. (($orderBy!=null)? " order by $orderBy":"")
			. ";";
		//echo $sql;
		$gbConectorBD1->conectar();  //conectarse a la base de datos
		//ejecutar el select, con los parámetros correspondientes	
		$result = $gbConectorBD1->ejecutarDMLDirecto($sql,$parametros);
		$gbConectorBD1->desconectar(); // desconectarse de la base de datos
		
		if (($result === FALSE) or ( $result === 0) ){
			//retorna false si ocurre un error, y 0 si la consulta no devuelve filas
			return $result;
		}else{
			for ($i = 0 ; $i < count($result); $i++){
				//retorna un arreglo de Instituto en caso de existir data
				$persona[$i] = new Persona();
				$persona[$i] = PersonaServicio::obtenerObjetoPersona($result,$i);
			}
			return $persona;
		}
	}
		
	static public function obtenerListaPersonas($patron){
		$patron = "%" . $patron . "%";
		$where = " (ts_estudiante.codigo = ts_persona.codigo) AND 
  					(upper(ts_persona.nombre1) like upper($1) OR
  					upper(ts_persona.nombre2) like upper($1) OR   
  					upper(ts_persona.apellido1) like upper($1) OR
					upper(ts_persona.apellido2) like upper($1) OR
					cast(ts_persona.cedula as varchar(10)) like $1)";
		
		//$where = "(ts_estudiante.codigo = ts_persona.codigo) AND cast(ts_persona.codigo as varchar(10)) like $1)";
		
		$campos = 	PersonaServicio::obtenerCampos();

		return PersonaServicio::obtenerPersonas($campos, $where, "apellido1 asc",array($patron));
		}
	
	static public function obtenerUnidadesCurriculares($curso){
		//reconocer gbConectorBD1
		var_dump($curso);
		global $gbConectorBD1;
		//construir sql
		$sql = "select nombre from ts_uni_curricular where cast(codigo as varchar(10)) like $1";
		//conexión, ejecución y desconexión
		$gbConectorBD1->conectar();
		for($i=0;$i < count($curso);$i++){
		$parametros= array($curso[$i]->obtenerCodUniCurricular());
		$result = $gbConectorBD1->ejecutarDMLDirecto($sql,$parametros);
		$unidadCurrricular[$i]=$result[0];
		}
		$gbConectorBD1->desconectar();
		//retornar $unidadCurrricular
		return $unidadCurrricular;

	}

	static public function obtenerPersonaPorCedula($cedula){
		//construir sql
		$campos = 	PersonaServicio::obtenerCamposSql();
		$where = "cast(ts_persona.cedula as varchar(10)) = $1";
		return PersonaServicio::obtenerPersonas($campos, $where, null, array($cedula));
	}

	static public function obtenerPersonaPorRif($Rif){
		//construir sql
		$campos = 	PersonaServicio::obtenerCamposSql();
		$where = "cast(ts_persona.cedula as varchar(20)) = $1";
		return PersonaServicio::obtenerPersonas($campos, $where, null, array($Rif));
	}
}
?>
